/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.saber.certificacao.ejbs.stateless;

import br.com.saber.certificacao.ejbs.stateless.interfaces.ProfessorVersaoBeanLocal;
import br.com.saber.certificacao.ejbs.stateless.interfaces.UsuarioBeanLocal;
import br.com.saber.certificacao.modelos.Usuario;
import br.com.saber.certificacao.modelos.relacionamentos.ProfessorVersao;
import br.com.saber.certificacao.modelos.relacionamentos.idcompostos.IdProfessorVersaoPk;
import br.com.saber.certificacao.modelos.validadores.exceptions.UsuarioException;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Guilherme
 */
@Stateless
public class ProfessorVersaoBean implements ProfessorVersaoBeanLocal {

    @PersistenceContext(name = "jdbc/saber")
    private EntityManager manager;
    
    @Override
    public ProfessorVersao buscarProfessorVersaoPorId(Long professorId , Long idQuestao){
        return this.manager.find(ProfessorVersao.class , new IdProfessorVersaoPk(professorId,idQuestao));
    }
    
    @Override
    public ProfessorVersao buscarProfessorVersaoPorId(IdProfessorVersaoPk id){
        return this.manager.find(ProfessorVersao.class ,id);
    }
    
    /**
     * Carrega O Set de ProfessorVersao deste usuário.
     * Esta coleção é de demanda Lazy por isso a necessidade
     * desta carga de modo separado.
     * @param usuario
     * @return 
     */
    @Override
    public Usuario carregarProfessorVersao(Usuario usuario){
        Usuario toReturn = this.manager.find(Usuario.class, usuario.getId());
        toReturn.getVersoesDesteProfessor().size();
        return toReturn;
    }

     /**
     * Devido não apagar o relacionamento ProfessorVersao, será salvo de maneira individual o relacionamento
     * entre Usuario e ProfessorVerssao.
     * @param professor 
     */
    @Override
    public void salvarProfessorVersoes(Usuario professor) {
        if(professor.getSenha() == null){
            throw new UsuarioException("usuarioSenhaNulo");
        }
        Query q = manager.createNamedQuery("ProfessorVersaoBean.salvarProfessorComVersoes");
        q.setParameter("professor", professor);
        q.executeUpdate();
        manager.flush();
        for(ProfessorVersao pv : professor.getVersoesDesteProfessor()){
            manager.persist(pv);
        }
        manager.merge(professor);
        manager.flush();
    }
    
    
}
